package ua.kratik.seabattle.game;

import ua.kratik.seabattle.game.enums.ShootResult;

/**
 * This interface must be implemented by Admiral class to provide 
 * anonymous interaction by different Admiral instances 
 * 
 * @author Andrii_Kratik
 */
public interface Enemy {
	/**
	 * If you call this method through Enemy interface you must specify 
	 * coordinates of supposed enemy ship to shoot at one. 
	 * 
	 * @param c - coordinates of point to shoot at which
	 * @return result of shooting
	 * @throws IllegalArgumentException if coordinates are incorrect
	 * @throws NullPointerException if argument <code>c</code> is null
	 */
	public ShootResult shoot(Coordinates c) 
			throws IllegalArgumentException, NullPointerException;

	/**
	 * Is called by participant who accepts challenge to notify his 
	 *  opponent about starting the game
	 * @param enemy
	 */
	public void challengeAccepted(Enemy enemy);
}
